﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using System.Text;
using DAL;
using System.Transactions;
using System.IO;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.OleDb;
using DAL;
using UtilityExtensions;


namespace BOL.UI
{
    public class UIBL
    {


        public int AddUIDeposito(dbGestionDataContext _db, int idEtapa,
                                    string codigo,
                                    string descripcion,
                                    int idLocalizacion,
                                    int idAtributo,
                                    int plazoEntrega,
                                    int idPiso,
                                    int idModelo,
                                    DateTime fechaFin,
                                    string comentario,
                                    bool bitActivo,
                                    string direccion,
                                    string referencia,
                                    
                                   
                                    decimal areaTerreno,
                                    decimal areaTechada,
                                    decimal areaocupada,
                                    string numPartida,
                                    int idMoneda,
                                    decimal precio,
                                 
                                    decimal montoSeparacion,
                                    string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas)
        {

            using (TransactionScope ts = new TransactionScope())
            {

                

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 2;
                int idEstado = 1;

                DAL.UI db = new DAL.UI();
                db.SetAdd(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             0, 0, idUsuarioCre, cordenadas);

                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUIDeposito(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                   string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                  
                                 
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                 
                                  int idMoneda,
                                  decimal precio,
                                
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                  string cordenadas)
        {

            using (TransactionScope ts = new TransactionScope())
            {

               

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 2;


                DAL.UI db = _db.UIs.Single(p => p.idInternal == idUI);

                db.SetUpdate(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, comentario, plazoEntrega,
                            fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             0, 0, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }





        public int AddUIEstacionamiento(dbGestionDataContext _db, 
                                    int idEtapa,
                                  string codigo,
                                     string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                 
                                 
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  int idMoneda,
                                  decimal precio,
                                
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                  string fondo,
                                  string frente,
                                  string derecho,
                                  string izquierdo,
                                  string cordenadas
                                  )
        {

            using (TransactionScope ts = new TransactionScope())
            {

               
                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 3;
                int idEstado = 1;

                DAL.UI db = new DAL.UI();
                db.SetAdd(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             0, 0, idUsuarioCre,
                             cordenadas);

                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUIEstacionamiento(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                  string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                  
                                  
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,

                                  int idMoneda,
                                  decimal precio,
                                 
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas
                                  )
        {

            using (TransactionScope ts = new TransactionScope())
            {

               

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 3;


                DAL.UI db = _db.UIs.Single(p => p.idInternal == idUI);

                db.SetUpdate(_db, codigo, descripcion, 
                            UITIPO, idLocalizacion, idPiso, idModelo, comentario, plazoEntrega,
                            fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             0, 0, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }






        public int AddUIOficina(dbGestionDataContext _db, 
                                    int idEtapa,
                                    string codigo,
                                     string descripcion,
                                    int idLocalizacion,
                                    int idAtributo,
                                    int plazoEntrega,
                                    int idPiso,
                                    int idModelo,
                                    DateTime fechaFin,
                                    string comentario,
                                    bool bitActivo,
                                    string direccion,
                                    string referencia,
                                   
                                   
                                    decimal areaTerreno,
                                    decimal areaTechada,
                                    decimal areaocupada,
                                    string numPartida,
                                    short numDormitorios,
                                    short numBanios,
                                    int idMoneda,
                                    decimal precio,
                                    
                                    decimal montoSeparacion,
                                    string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas
                                    )
        {

            using (TransactionScope ts = new TransactionScope())
            {

               

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 6;
                int idEstado = 1;

                DAL.UI db = new DAL.UI();
                db.SetAdd(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,
                            cordenadas);

                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUIOficina(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                  string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                 
                                  
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  short numDormitorios,
                                  short numBanios,
                                  int idMoneda,
                                  decimal precio,
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas
                                  )
        {

            using (TransactionScope ts = new TransactionScope())
            {

               

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 6;


                DAL.UI db = _db.UIs.Single(p => p.idInternal == idUI);

                db.SetUpdate(_db, codigo, descripcion, 
                            UITIPO, idLocalizacion, idPiso, idModelo, comentario, plazoEntrega,
                            fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int AddUITienda(dbGestionDataContext _db, int idEtapa,
                                  string codigo,
                                  string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                 
                                 
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  short numDormitorios,
                                  short numBanios,
                                  int idMoneda,
                                  decimal precio,
                                 
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                  string fondo,
                                  string frente,
                                  string derecho,
                                  string izquierdo,
                                    string cordenadas
                                  )
        {

            using (TransactionScope ts = new TransactionScope())
            {

                

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 7;
                int idEstado = 1;

                DAL.UI db = new DAL.UI();
                db.SetAdd(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUITienda(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                   string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                 
                                  
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  short numDormitorios,
                                  short numBanios,
                                  int idMoneda,
                                  decimal precio,
                                 decimal montoSeparacion,
                                  string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas
                                  )
        {

            using (TransactionScope ts = new TransactionScope())
            {

                

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 7;


                DAL.UI db = _db.UIs.Single(p => p.idInternal == idUI);

                db.SetUpdate(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, comentario, plazoEntrega,
                            fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }



        public int AddUIDepartamento(dbGestionDataContext _db,
                                    int idEtapa,
                                    string codigo,
                                    string descripcion,
                                    int idLocalizacion,
                                    int idAtributo,
                                    int plazoEntrega,
                                    int idPiso,
                                    int idModelo,
                                    DateTime fechaFin,
                                    string comentario,
                                    bool bitActivo,
                                    string direccion,
                                    string referencia,
                                    decimal areaTerreno,
                                    decimal areaTechada,
                                    decimal areaocupada,
                                    string numPartida,
                                    short numDormitorios,
                                    short numBanios,
                                    int idMoneda,
                                    decimal precio,
                                    decimal montoSeparacion,
                                    string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas
                                    )
        {

            using (TransactionScope ts = new TransactionScope())
            {

                

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO=1;
                int idEstado=1;

                DAL.UI db = new DAL.UI();
                db.SetAdd(_db, codigo, descripcion,
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada,areaocupada,fondo,frente,derecho,izquierdo,null,
                            null, null,null, null, null, null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUIDepartamento(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                   string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                 
                                  
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  short numDormitorios,
                                  short numBanios,
                                  int idMoneda,
                                  decimal precio,
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecho,
                                    string izquierdo,
                                    string cordenadas
                                  )
        {

            using (TransactionScope ts = new TransactionScope())
            {

               

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 1;
                

                DAL.UI db = _db.UIs.Single(p=>p.idInternal==idUI);

                db.SetUpdate(_db, codigo, descripcion, 
                            UITIPO, idLocalizacion, idPiso, idModelo, comentario, plazoEntrega, 
                            fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecho, izquierdo, null,
                            null, null, null, null,null,null, null, null, null, null, null, null, null, null, null, null, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }








        public int AddUILote(dbGestionDataContext _db, int idEtapa,
                                   string codigo,
                                   string descripcion,
                                   int idLocalizacion,
                                   int idAtributo,
                                   int plazoEntrega,
                                   int idPiso,
                                   int idModelo,
                                   DateTime fechaFin,
                                   string comentario,
                                   bool bitActivo,
                                   string direccion,
                                   string referencia,
                                   decimal areaTerreno,
                                   decimal areaTechada,
                                   decimal areaocupada,
                                   string numPartida,
                                   int idMoneda,
                                   decimal precio,
                                   decimal montoSeparacion,
                                   string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecha,
                                    string izquierda,
                                  
                                    decimal dormitorio1,
                                    decimal dormitorio2,
                                    decimal dormitorio3,
                                    decimal dormitorio4,
                                    decimal banio1,
                                    decimal banio2,
                                    decimal banio3,
                                    decimal comedor,
                                    decimal sala,
                                    decimal salacomedorCocina,
                                    decimal salacomedor,
                                    decimal cocina,
                                    decimal patio,
                                    decimal labanderia,
                                    decimal patiolabanderia,
                                    decimal zonaComun,     
                                    string cordenadas,
                                      short numPiso
                                   )
        {

            using (TransactionScope ts = new TransactionScope())
            {
                              

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 4;
                int idEstado = 1;
                short numDormitorios=0;
                short numBanios = 0;
               

                DAL.UI db = new DAL.UI();

                db.SetAdd(_db, codigo, descripcion, 
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo,frente, derecha, izquierda, numPiso,
                            dormitorio1, dormitorio2, dormitorio3, dormitorio4, banio1, banio2, banio3, comedor, sala, salacomedorCocina,
                            salacomedor, cocina, patio, labanderia, patiolabanderia,zonaComun, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);






                  
                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUILote(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                  string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idBloqueOPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                  
                                 
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  
                                  int idMoneda,
                                  decimal precio,
                                  
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                   string fondo,
                                    string frente,
                                    string derecha,
                                    string izquierda,
                                    short numPiso,
                                    decimal dormitorio1,
                                    decimal dormitorio2,
                                    decimal dormitorio3,
                                    decimal dormitorio4,
                                    decimal banio1,
                                    decimal banio2,
                                    decimal banio3,
                                    decimal comedor,
                                    decimal sala,
                                    decimal salacomedorCocina,
                                    decimal salacomedor,
                                    decimal cocina,
                                    decimal patio,
                                    decimal labanderia,
                                    decimal patiolabanderia,
                                    decimal zonaComun,
                                    string cordenadas)
        {

            using (TransactionScope ts = new TransactionScope())
            {

                

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 4;
                short numDormitorios=0;
                short numBanios = 0;

                DAL.UI db = _db.UIs.Single(p => p.idInternal == idUI);

                db.SetUpdate(_db, codigo, descripcion,
                           UITIPO, idLocalizacion, idBloqueOPiso, idModelo, 
                           comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                           idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecha, izquierda, numPiso,
                           dormitorio1, dormitorio2, dormitorio3, dormitorio4, banio1, banio2, banio3, comedor, sala, salacomedorCocina,
                           salacomedor, cocina, patio, labanderia, patiolabanderia, zonaComun, montoSeparacion,
                            numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }






        public int AddUICasa(dbGestionDataContext _db, int idEtapa,
                                   string codigo,
                                    string descripcion,
                                   int idLocalizacion,
                                   int idAtributo,
                                   int plazoEntrega,
                                   int idPiso,
                                   int idModelo,
                                   DateTime fechaFin,
                                   string comentario,
                                   bool bitActivo,
                                   string direccion,
                                   string referencia,
                                  
                                   
                                   decimal areaTerreno,
                                   decimal areaTechada,
                                   decimal areaocupada,
                                   string numPartida,
                                   short numDormitorios,
                                   short numBanios,
                                   int idMoneda,
                                   decimal precio,
                                  
                                   decimal montoSeparacion,
                                   string urbanizacion,
                                    string fondo,
                                    string frente,
                                    string derecha,
                                    string izquierda,
                                    short numPiso,
                                    decimal dormitorio1,
                                    decimal dormitorio2,
                                    decimal dormitorio3,
                                    decimal dormitorio4,
                                    decimal banio1,
                                    decimal banio2,
                                    decimal banio3,
                                    decimal comedor,
                                    decimal sala,
                                    decimal salacomedorCocina,
                                    decimal salacomedor,
                                    decimal cocina,
                                    decimal patio,
                                    decimal labanderia,
                                    decimal patiolabanderia,
                                    decimal zonaComun,
                                    string cordenadas
                                   )
        {

            using (TransactionScope ts = new TransactionScope())
            {

                

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 5;
                int idEstado = 1;

                DAL.UI db = new DAL.UI();

                db.SetAdd(_db, codigo, descripcion, 
                            UITIPO, idLocalizacion, idPiso, idModelo, idEtapa, idEstado,
                            comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                            idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecha, izquierda, numPiso,
                            dormitorio1, dormitorio2, dormitorio3, dormitorio4, banio1, banio2, banio3, comedor, sala, salacomedorCocina,
                            salacomedor, cocina, patio, labanderia, patiolabanderia, zonaComun, montoSeparacion,
                             numDormitorios, numBanios, idUsuarioCre,cordenadas);



                _db.UIs.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }


        public int UpdateUICasa(dbGestionDataContext _db,
                                  int idUI,
                                  string codigo,
                                   string descripcion,
                                  int idLocalizacion,
                                  int idAtributo,
                                  int plazoEntrega,
                                  int idPiso,
                                  int idModelo,
                                  DateTime fechaFin,
                                  string comentario,
                                  bool bitActivo,
                                  string direccion,
                                  string referencia,
                                 
                                 
                                  decimal areaTerreno,
                                  decimal areaTechada,
                                  decimal areaocupada,
                                  string numPartida,
                                  short numDormitorios,
                                  short numBanios,
                                  int idMoneda,
                                  decimal precio,
                                 
                                  decimal montoSeparacion,
                                  string urbanizacion,
                                   string fondo,
                                    string frente,
                                    string derecha,
                                    string izquierda,
                                    short numPiso,
                                    decimal dormitorio1,
                                    decimal dormitorio2,
                                    decimal dormitorio3,
                                    decimal dormitorio4,
                                    decimal banio1,
                                    decimal banio2,
                                    decimal banio3,
                                    decimal comedor,
                                    decimal sala,
                                    decimal salacomedorCocina,
                                    decimal salacomedor,
                                    decimal cocina,
                                    decimal patio,
                                    decimal labanderia,
                                    decimal patiolabanderia,
                                    decimal zonaComun,
                                    string  cordenadas)
        {

            using (TransactionScope ts = new TransactionScope())
            {

               
                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                int UITIPO = 5;


                DAL.UI db = _db.UIs.Single(p => p.idInternal == idUI);

                db.SetUpdate(_db, codigo, descripcion, 
                           UITIPO, idLocalizacion, idPiso, idModelo,
                           comentario, plazoEntrega, fechaFin, bitActivo, numPartida, direccion, referencia, urbanizacion, idAtributo,
                           idMoneda, precio, areaTerreno, areaTechada, areaocupada, fondo, frente, derecha, izquierda, numPiso,
                           dormitorio1, dormitorio2, dormitorio3, dormitorio4, banio1, banio2, banio3, comedor, sala, salacomedorCocina,
                           salacomedor, cocina, patio, labanderia, patiolabanderia, zonaComun, montoSeparacion,
                            numDormitorios, numBanios, idUsuarioCre,cordenadas);

                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }



          public void GenerarUI(dbGestionDataContext _db,int idTipoUI,int Cantidad,int idLocalizacion)
          {

              var localizacion=_db.UILocalizacions.Single(p=>p.idInternal==idLocalizacion);

              if (localizacion.UIBloques.Count()==0){throw new Exception("Falta registrar  BLOQUE Y/O Piso");}
              if (localizacion.Etapa.Proyecto.UIModeloTipos.Count()==0){throw new Exception("Falta MODELOS UI en el proyecto");}
              
              switch (idTipoUI)
              {
                  case 1:   //depa
                      //verificamos que tenga el  ultimo codigo generado segin patron
                       

                      for (int i = 1; i <= Cantidad; i++)
			                {
                                string num = i < 10 ? "0" + i.ToString() : i.ToString();
			                        this.AddUIDepartamento(_db,
                                                localizacion.Etapa.idInternal,
                                                "DPTO " + num,
                                                "DPTO " + num,
                                                idLocalizacion,
                                                57, //normal
                                                localizacion.Etapa.plazoEntrega,
                                                localizacion.UIBloques.First().idInternal,
                                                localizacion.Etapa.Proyecto.UIModeloTipos.First().idInternal,
                                                localizacion.Etapa.Proyecto.fechaFin.Value,
                                                "",
                                                true,
                                                localizacion.Etapa.Proyecto.direccion,
                                                localizacion.Etapa.Proyecto.referencia,
                                              
                                                0,
                                                0,
                                                0,
                                                "",
                                                0,
                                                0, 
                                                3,
                                                0,
                                                0,
                                                "",
                                                "",
                                                "",
                                                "",
                                                "","");

                                 }

                      break;

                      case 2:     //deposito
                       for (int i = 1; i <= Cantidad; i++)
			                {
                                string num = i < 10 ? "0" + i.ToString() : i.ToString();         
                                        this.AddUIDeposito(_db,
                                                localizacion.Etapa.idInternal,
                                                "DEPOSITO " + num,
                                                "DEPOSITO " + num,
                                                idLocalizacion,
                                                57, //normal
                                                localizacion.Etapa.plazoEntrega,
                                                localizacion.UIBloques.First().idInternal,
                                                localizacion.Etapa.Proyecto.UIModeloTipos.First().idInternal,
                                                localizacion.Etapa.Proyecto.fechaFin.Value,
                                                "",
                                                true,
                                                localizacion.Etapa.Proyecto.direccion,
                                                localizacion.Etapa.Proyecto.referencia,
                                               
                                                0,
                                                0,
                                                0,
                                                "",
                                                 3,
                                                0,
                                                0,
                                                "",
                                                "",
                                                "",
                                                "",
                                                "","");

                                 }
                      break;

                      case 3: //estacionamiento
                      for (int i = 1; i <= Cantidad; i++)
			                {
                                string num = i < 10 ? "0" + i.ToString() : i.ToString();           
                                      this.AddUIEstacionamiento(_db,
                                                localizacion.Etapa.idInternal,
                                                "EST " + num,
                                                "EST " + num,
                                                idLocalizacion,
                                                57, //normal
                                                localizacion.Etapa.plazoEntrega,
                                                localizacion.UIBloques.First().idInternal,
                                                localizacion.Etapa.Proyecto.UIModeloTipos.First().idInternal,
                                                localizacion.Etapa.Proyecto.fechaFin.Value,
                                                "",
                                                true,
                                                localizacion.Etapa.Proyecto.direccion,
                                                localizacion.Etapa.Proyecto.referencia,
                                               
                                                0,
                                                0,
                                                0,
                                                "",
                                                 3,
                                                0,
                                                0,
                                                "",
                                                "",
                                                "",
                                                "",
                                                "","");

                                 }
                      break;

                      case 4:       //lote
                       for (int i = 1; i <= Cantidad; i++)
			                {
                                string num = i < 10 ? "0" + i.ToString() : i.ToString();   
			                        this.AddUILote(_db,
                                                localizacion.Etapa.idInternal,
                                                "LOT "+ num,
                                                "LOT "+ num,
                                                idLocalizacion,
                                                57, //normal
                                                localizacion.Etapa.plazoEntrega,
                                                localizacion.UIBloques.First().idInternal,
                                                localizacion.Etapa.Proyecto.UIModeloTipos.First().idInternal,
                                                localizacion.Etapa.Proyecto.fechaFin.Value,
                                                "",
                                                true,
                                                localizacion.Etapa.Proyecto.direccion,
                                                localizacion.Etapa.Proyecto.referencia,
                                                0,
                                                0,
                                                0,
                                                "",   //partida
                                                3,
                                                0,
                                                0,
                                                "",   //urbanizacion
                                                "",   //fondo
                                                "",   //frente
                                                "",   //derecha
                                                "",    //Izquierda
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                0,
                                                "",1);

                                 }
                      break;


                      case 5:       //casa
                       for (int i = 1; i <= Cantidad; i++)
			                {
                                string num = i < 10 ? "0" + i.ToString() : i.ToString();   
			                        this.AddUICasa(_db,
                                                localizacion.Etapa.idInternal,
                                                "CASA "+num,
                                                "CASA "+num,
                                                idLocalizacion,
                                                57, //normal
                                                localizacion.Etapa.plazoEntrega,
                                                localizacion.UIBloques.First().idInternal,
                                                localizacion.Etapa.Proyecto.UIModeloTipos.First().idInternal,
                                                localizacion.Etapa.Proyecto.fechaFin.Value,
                                                "",
                                                true,
                                                localizacion.Etapa.Proyecto.direccion,
                                                localizacion.Etapa.Proyecto.referencia,
                                              
                                                0,
                                                0,
                                                0,
                                                "",
                                                0,
                                                0, 
                                                3,
                                                0,
                                                0,
                                                "",
                                                "",
                                                "",
                                                "",
                                                "",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"");

                                 }
                      break;

                      case 6:       //oficina
                      for (int i = 1; i <= Cantidad; i++)
                      {
                          string num = i < 10 ? "0" + i.ToString() : i.ToString();
                          this.AddUIOficina(_db,
                                      localizacion.Etapa.idInternal,
                                      "OFICINA "+num,
                                      "OFICINA "+num,
                                      idLocalizacion,
                                      57, //normal
                                      localizacion.Etapa.plazoEntrega,
                                      localizacion.UIBloques.First().idInternal,
                                      localizacion.Etapa.Proyecto.UIModeloTipos.First().idInternal,
                                      localizacion.Etapa.Proyecto.fechaFin.Value,
                                      "",
                                      true,
                                      localizacion.Etapa.Proyecto.direccion,
                                      localizacion.Etapa.Proyecto.referencia,
                                      
                                      0,
                                      0,
                                      0,
                                      "",
                                      0,
                                      0,
                                      3,
                                      0,
                                      0,
                                      "",
                                      "",
                                      "",
                                      "",
                                      "",  "");

                      }
                      break;

                      case 7:       //tienda
                     // this.AddUIDepartamento(_db,);
                      break;

                  default:
                      break;
              }
          }

        public bool delete(int idInternal)
        {

            bool result = false;
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db;
                _db = new dbGestionDataContext(Parametros.strConnString);

                var UI = _db.UIs.Single(p => p.idInternal == idInternal);

                _db.UIs.DeleteOnSubmit(UI);
                _db.SubmitChanges();
                ts.Complete();
                result = true;
            }
            return result;

        }


        public bool bloqueOrDesBloqueo(int idInternal)
        {

            bool result = false;
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db;
                _db = new dbGestionDataContext(Parametros.strConnString);

                var UI = _db.UIs.Single(p => p.idInternal == idInternal);
                        //1	Disponible
                        //2	Separado
                        //16	Vendido
                        //17	Bloqueado

                if (UI.idEstado!=2 | UI.idEstado!=16)
                {
                    UI.idEstado = UI.idEstado == 1 ? 17 : 1;
                }

                
                _db.SubmitChanges();
                ts.Complete();
                result = true;
            }
            return result;

        }

        public IEnumerable<UIResumenInfo> GetVentaResumen(int idProyecto,int uiTipo)
        {
            var q = from a in DbUtil.Db.Etapas
                    where a.idProyecto == idProyecto
                    & a.bitActivo==true
                    select new UIResumenInfo
                    {
                        nombre = a.descripcion,
                        total = a.UIs.Where(p=>(uiTipo==0?p.idTipoUI!=uiTipo:p.idTipoUI==uiTipo)).Count(),
                        bloqueado = a.UIs.Where(p => p.idEstado == 17 
                            & (uiTipo==0?p.idTipoUI!=uiTipo:p.idTipoUI==uiTipo)
                            ).Count(),
                        
                            venta = a.UIs.Where(p => (p.idEstado == 16 )
                            & (uiTipo==0?p.idTipoUI!=uiTipo:p.idTipoUI==uiTipo)
                            ).Count(),
                            separado= a.UIs.Where(p => (p.idEstado == 2 )
                            & (uiTipo==0?p.idTipoUI!=uiTipo:p.idTipoUI==uiTipo)
                            ).Count(),
                            
                        esTotal=false,

                      
                    };



            return q;

        }
        public void ExportarDepartamentos()
        {
            Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wbPresupuesto;
            Microsoft.Office.Interop.Excel.Worksheet wsPresupuesto;



            string ruta = String.Format(@"C:\tmp\departamentos.xls");
            string directorioArchivo = ruta;



            bool FinArchivo = false;
            int numeroCelda = 1;
            int condadorVacio = 1;
            int cursor = 1;
            string celdaValor = "";
            try
            {

                wbPresupuesto = xlsApp.Workbooks.Open(directorioArchivo);
                dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString);

                wsPresupuesto = (Microsoft.Office.Interop.Excel.Worksheet)wbPresupuesto.ActiveSheet;


               

                while (!FinArchivo)
                {

                    cursor++;
                    celdaValor =
                        this.ReadCelda(ref wsPresupuesto, "A" + cursor);
                    numeroCelda++;

                    DAL.UI unidad = new DAL.UI();

                    unidad.idEtapa = this.ReadCelda(ref wsPresupuesto, "A" + cursor).ToInt();//A	ETAPA 
                    unidad.idTipoUI = this.ReadCelda(ref wsPresupuesto, "B" + cursor).ToInt();//B	UNIDAD INMOBILIARIA
                    unidad.codigo = this.ReadCelda(ref wsPresupuesto, "C" + cursor);//A	COD VENTA
                    unidad.idAtributo = this.ReadCelda(ref wsPresupuesto, "D" + cursor).ToInt();//B	CARACTERISTICA
                    unidad.idTipoModelo = this.ReadCelda(ref wsPresupuesto, "E" + cursor).ToInt();//C	MODELO
                    unidad.plazoMaxEntrega = this.ReadCelda(ref wsPresupuesto, "F" + cursor).ToInt();//A	PLAZO MAX ENTREGA
                    unidad.fechaFin = new DateTime(2013, 12, 31);
                                    //this.ReadCelda(ref wsPresupuesto, "G" + cursor).ToDate().Value;//B	FECH ENTREGA
                    unidad.comentario = this.ReadCelda(ref wsPresupuesto, "H" + cursor);//C	COMENTARIO
                    unidad.bitActivo = this.ReadCelda(ref wsPresupuesto, "I" + cursor).ToBool();//A	ACTIVO
                    unidad.direccion = this.ReadCelda(ref wsPresupuesto, "J" + cursor);//B	CALLE
                    unidad.descripcion = this.ReadCelda(ref wsPresupuesto, "K" + cursor);//C	NRO LOTE DPTO
                    unidad.urbanizacion = this.ReadCelda(ref wsPresupuesto, "L" + cursor);//B	URBANIZACION
                    unidad.idLocalizacion = this.ReadCelda(ref wsPresupuesto, "M" + cursor).ToInt();//C	TORRE/MZ
                    unidad.idTipoBloquePiso = this.ReadCelda(ref wsPresupuesto, "N" + cursor).ToInt();//A	PISO/BLOQUE
                    unidad.areaTerreno = this.ReadCelda(ref wsPresupuesto, "O" + cursor).ToDecimal().Value;//B	AREA TERRENO
                    unidad.areaTechada = this.ReadCelda(ref wsPresupuesto, "P" + cursor).ToDecimal().Value;//C	AREA  TECHADA
                    unidad.areaOcupada = this.ReadCelda(ref wsPresupuesto, "Q" + cursor).ToDecimal().Value;//A	AREA OCUPADA
                    unidad.numPartida = this.ReadCelda(ref wsPresupuesto, "R" + cursor);//B	NUM PARTIDA
                    unidad.frente = this.ReadCelda(ref wsPresupuesto, "S" + cursor);//C	FRENTE 
                    unidad.derecha = this.ReadCelda(ref wsPresupuesto, "T" + cursor);//A	DERECHO
                    unidad.izquierdo = this.ReadCelda(ref wsPresupuesto, "U" + cursor);//B	IZQUIERDO
                    unidad.fondo = this.ReadCelda(ref wsPresupuesto, "V" + cursor);//C	FONDO
                    unidad.dormitorios = Convert.ToInt16(this.ReadCelda(ref wsPresupuesto, "W" + cursor));//A	N DORM.
                    unidad.banio = Convert.ToInt16(this.ReadCelda(ref wsPresupuesto, "X" + cursor));//B	N BAÑOS 
                    unidad.idMoneda = this.ReadCelda(ref wsPresupuesto, "Y" + cursor).ToInt();//C	MONEDA
                    unidad.precio = this.ReadCelda(ref wsPresupuesto, "Z" + cursor).ToDecimal().Value;//A	PRECIO 57
                    unidad.montoSeparacion = this.ReadCelda(ref wsPresupuesto, "AA" + cursor).ToDecimal().Value;//B	SEPARACION
                    unidad.fechaCre = DateTime.Now;
                    unidad.fechaMod = DateTime.Now;
                    unidad.usuarioCre = 1;
                    unidad.usuarioMod = 1;
                    unidad.referencia = "";
                    unidad.idEstado = 1;
                    unidad.bitActivo = true;

                    _db.UIs.InsertOnSubmit(unidad);
                    _db.SubmitChanges();
                     if (celdaValor == "")
                    {
                        condadorVacio++;
                    }
                    if (condadorVacio == 15)
                        break;
              
                }
               
            }
            catch (Exception ex)
            {

                xlsApp.ActiveWorkbook.Close(true, directorioArchivo, Type.Missing);
                throw new Exception(ex.Message + "Ruta:" + directorioArchivo + "celda:" + celdaValor + "CURSOR:" + cursor);
            }
            finally
            {
                xlsApp.ActiveWorkbook.Close(true, directorioArchivo, Type.Missing);
                xlsApp.Quit();
                xlsApp = null;
            }
        }
        private string ReadCelda(ref Microsoft.Office.Interop.Excel.Worksheet sheet, string cell)
        {
            Microsoft.Office.Interop.Excel.Range range = sheet.get_Range(cell, cell);
            if (range.Value2 != null)
                return range.Value2.ToString();
            else
                return "";
        }


        public List<DAL.EXCELUI> importFromExcel(string ruta, int hoja,int idEtapa)
        {
            List<DAL.EXCELUI> lista = new List<DAL.EXCELUI>();
            Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wbPresupuesto;
            Microsoft.Office.Interop.Excel.Worksheet wsPresupuesto;

           

                bool FinArchivo = false;
                int numeroCelda = 1;
                int condadorVacio = 1;
                int cursor = 1;
               // string celdaValor = "";
                wbPresupuesto = xlsApp.Workbooks.Open(ruta);


                wsPresupuesto =
                    (Microsoft.Office.Interop.Excel.Worksheet)wbPresupuesto.Sheets[hoja];

                while (!FinArchivo)
                {
                    cursor++;
                    //string estado=this.ReadCelda(ref wsPresupuesto, "D" + cursor);
                    //if (estado == "VENDIDO" | estado == "SEPARADO")
                    //{
                    //    continue;
                    //}
                    DAL.EXCELUI nuevo = new DAL.EXCELUI();
                   
                    nuevo.idEtapa = idEtapa;
                    nuevo.CODIGO = this.ReadCelda(ref wsPresupuesto, "A" + cursor);
                    nuevo.CARACTERISTICA = this.ReadCelda(ref wsPresupuesto, "B" + cursor);
                    nuevo.MODELO = this.ReadCelda(ref wsPresupuesto, "C" + cursor);
                    nuevo.ESTADO = this.ReadCelda(ref wsPresupuesto, "D" + cursor);
                    nuevo.FECHA = this.ReadCelda(ref wsPresupuesto, "E" + cursor);
                    nuevo.DIRECCION = this.ReadCelda(ref wsPresupuesto, "F" + cursor);
                    nuevo.REFERENCIA = this.ReadCelda(ref wsPresupuesto, "G" + cursor);
                    nuevo.UBICACION = this.ReadCelda(ref wsPresupuesto, "H" + cursor);
                    nuevo.LOTE = this.ReadCelda(ref wsPresupuesto, "I" + cursor);
                    nuevo.MANZANA = this.ReadCelda(ref wsPresupuesto, "J" + cursor);
                    nuevo.BLOQUE = this.ReadCelda(ref wsPresupuesto, "K" + cursor);
                    nuevo.ETAPA = this.ReadCelda(ref wsPresupuesto, "L" + cursor);
                    nuevo.AREATERRENO= this.ReadCelda(ref wsPresupuesto, "M" + cursor);
                    nuevo.AREACONSTRUIDA= this.ReadCelda(ref wsPresupuesto, "N" + cursor);
                    nuevo.PARTIDA = this.ReadCelda(ref wsPresupuesto, "O" + cursor);
                    nuevo.FRENTE = this.ReadCelda(ref wsPresupuesto, "P" + cursor);
                    nuevo.DERECHO = this.ReadCelda(ref wsPresupuesto, "Q" + cursor);
                    nuevo.IZQUIERDO = this.ReadCelda(ref wsPresupuesto, "R" + cursor);
                    nuevo.FONDO = this.ReadCelda(ref wsPresupuesto, "S" + cursor);
                    nuevo.PISOS = this.ReadCelda(ref wsPresupuesto, "T" + cursor);
                    nuevo.DORMITORIO1 = this.ReadCelda(ref wsPresupuesto, "U" + cursor);
                    nuevo.DORMITORIO2 = this.ReadCelda(ref wsPresupuesto, "V" + cursor);
                    nuevo.DORMITORIO3 = this.ReadCelda(ref wsPresupuesto, "W" + cursor);
                    nuevo.DORMITORIO4 = this.ReadCelda(ref wsPresupuesto, "X" + cursor);
                    nuevo.BANO1= this.ReadCelda(ref wsPresupuesto, "Y" + cursor);
                    nuevo.BANO2 = this.ReadCelda(ref wsPresupuesto, "Z" + cursor);
                    nuevo.BANO3 = this.ReadCelda(ref wsPresupuesto, "AA" + cursor);
                    nuevo.SALA = this.ReadCelda(ref wsPresupuesto, "AB" + cursor);
                    nuevo.COMEDOR = this.ReadCelda(ref wsPresupuesto, "AC" + cursor);
                    nuevo.COCINA = this.ReadCelda(ref wsPresupuesto, "AD" + cursor);
                    nuevo.SALA_COMEDOR = this.ReadCelda(ref wsPresupuesto, "AE" + cursor);
                    nuevo.SALA_COMEDOR_COCINA = this.ReadCelda(ref wsPresupuesto, "AF" + cursor);
                    nuevo.PATIO = this.ReadCelda(ref wsPresupuesto, "AG" + cursor);
                    nuevo.LAVANDERIA = this.ReadCelda(ref wsPresupuesto, "AH" + cursor);
                    nuevo.PATIO_LAVANDERIA = this.ReadCelda(ref wsPresupuesto, "AI" + cursor);
                    nuevo.ZONA_COMUN = this.ReadCelda(ref wsPresupuesto, "AJ" + cursor);
                    nuevo.AIRES = this.ReadCelda(ref wsPresupuesto, "AK" + cursor);
                    nuevo.PRECIO = this.ReadCelda(ref wsPresupuesto, "AL" + cursor);
                    nuevo.COMENTARIO = this.ReadCelda(ref wsPresupuesto, "AM" + cursor);

                    numeroCelda++;


                    //para terminar con el recorrido
                    if (nuevo.LOTE == "")
                    {
                        condadorVacio++;
                    }  
                    else
                        lista.Add(nuevo);


                    if (condadorVacio == 15)
                        break;

                    
                }

                return lista;

            }

        public void AddUIFromExcel(int idEtapa)
        {

                using(dbGestionDataContext _db= new DAL.dbGestionDataContext(Parametros.strConnString))
	            {

                     Etapa etapa= _db.Etapas.Single(p=>p.idInternal==idEtapa);

                     var w = from a in _db.EXCELUIs
                             where a.idEtapa== etapa.idInternal
                             group a by a.MODELO into  grupo
                             select grupo.Key;

                     foreach (var item in w)
                     {
                                 var r=  _db.UIModeloTipos.SingleOrDefault(p=>p.idProyecto==etapa.idProyecto & p.descripcion.Trim().ToUpper()==item.Trim().ToUpper());
                                        if (r==null)
                                            {
                                                UIModeloTipoBL bol = new UIModeloTipoBL();
                                                bol.Add(_db,item.ToUpper(), etapa.idProyecto);
                                            }
                     }
                    

                    // creamos las manzanas

                    var e= from a in _db.EXCELUIs
                           where a.idEtapa==idEtapa
                           group a by a.MANZANA into grup
                           select grup.Key;

                    


                    foreach (var item in e)
                    {
                        UILocalizacionBL bol = new UILocalizacionBL();
                        var localizacion = _db.UILocalizacions.SingleOrDefault(p => p.descripcion.ToUpper().Trim() == item.ToUpper().Trim() & p.idEtapa == idEtapa);
                        int idLocalizacion = 0;
                        if (localizacion == null)
                        {
                            idLocalizacion = bol.Add(_db, item, string.Empty, 0, idEtapa);
                        }
                        else
                            idLocalizacion = localizacion.idInternal;
                        
                        

                        var ee= _db.EXCELUIs.Where(p=>p.idEtapa==idEtapa & p.MANZANA==item).GroupBy(p=>p.BLOQUE).Select(p=>p.Key);
                        foreach (var bloq in ee)
	                        {                                          

                                var bus = _db.UIBloques.Where(o=>o.descripcion==bloq & o.idLocalizacion==idLocalizacion).First();
                                if (bus == null)
                                {
                                    UIBloque bloque = new DAL.UIBloque();
                                    bloque.SetAdd(_db, bloq, idLocalizacion);
                                    _db.SubmitChanges();
                                }
	                        };

                    }

                   

                    var q = from a in _db.EXCELUIs
                            where a.idEtapa == idEtapa
                            select a;

                    foreach (EXCELUI item in q)
                    {
                        

                        UILocalizacion manzada = _db.UILocalizacions.Single(
                                  p=>p.descripcion.ToUpper().Trim()==item.MANZANA.ToUpper().Trim() 
                                & p.idEtapa==idEtapa);
                        DateTime fechaFin = item.FECHA.ToDate() == null ? etapa.fechaFin : item.FECHA.ToDate().Value;
                        UIBloque bloque = _db.UIBloques.Where(l => l.descripcion == item.BLOQUE && l.idLocalizacion == manzada.idInternal).First();
                        UIModeloTipo modelo = _db.UIModeloTipos.Single(o => o.idProyecto == etapa.idProyecto & o.descripcion == item.MODELO);

                        
                        int idcaracteristica = 67;
                        //no debe repetir si exite en el sistema

                        var ui = _db.UIs.SingleOrDefault(l => l.descripcion == item.LOTE
                                                            & l.idLocalizacion == bloque.idLocalizacion
                                                            & l.idTipoBloquePiso == bloque.idInternal
                                                            & l.idEtapa == idEtapa);

                        if (ui == null)
                        {

                            //this.AddUILote(_db,
                            //                idEtapa,
                            //                (item.CODIGO.HasValue() ? item.CODIGO : item.LOTE),
                            //                item.LOTE,
                            //                manzada.idInternal,
                            //                idcaracteristica,
                            //                bloque.UILocalizacion.Etapa.plazoEntrega,
                            //                bloque.idInternal,
                            //                modelo.idInternal,
                            //                fechaFin,
                            //                item.COMENTARIO,
                            //                true,
                            //                item.DIRECCION,
                            //                item.REFERENCIA,
                            //                item.AREATERRENO.ToDecimal() == null ? 0 : item.AREATERRENO.ToDecimal().Value,
                            //                item.AREACONSTRUIDA.ToDecimal() == null ? 0 : item.AREACONSTRUIDA.ToDecimal().Value,
                            //                item.AREATERRENO.ToDecimal() == null ? 0 : item.AREATERRENO.ToDecimal().Value,
                            //                item.PARTIDA,
                            //                3,
                            //                item.PRECIO.ToDecimal() == null ? 0 : item.PRECIO.ToDecimal().Value,
                            //                0,
                            //                item.UBICACION,
                            //                item.FONDO,
                            //                item.FRENTE,
                            //                item.DERECHO,
                            //                item.IZQUIERDO,
                            //                item.DORMITORIO1.ToDecimal() == null ? 0 : item.DORMITORIO1.ToDecimal().Value,
                            //                item.DORMITORIO2.ToDecimal() == null ? 0 : item.DORMITORIO2.ToDecimal().Value,
                            //                item.DORMITORIO3.ToDecimal() == null ? 0 : item.DORMITORIO3.ToDecimal().Value,
                            //                item.DORMITORIO4.ToDecimal() == null ? 0 : item.DORMITORIO4.ToDecimal().Value,
                            //                item.BANO1.ToDecimal() == null ? 0 : item.BANO1.ToDecimal().Value,
                            //                item.BANO2.ToDecimal() == null ? 0 : item.BANO2.ToDecimal().Value,
                            //                item.BANO3.ToDecimal() == null ? 0 : item.BANO3.ToDecimal().Value,
                            //                item.COMEDOR.ToDecimal() == null ? 0 : item.COMEDOR.ToDecimal().Value,
                            //                item.SALA.ToDecimal() == null ? 0 : item.SALA.ToDecimal().Value,
                            //                item.SALA_COMEDOR_COCINA.ToDecimal() == null ? 0 : item.SALA_COMEDOR_COCINA.ToDecimal().Value,
                            //                item.SALA_COMEDOR.ToDecimal() == null ? 0 : item.SALA_COMEDOR.ToDecimal().Value,
                            //                item.COCINA.ToDecimal() == null ? 0 : item.COCINA.ToDecimal().Value,
                            //                item.PATIO.ToDecimal() == null ? 0 : item.PATIO.ToDecimal().Value,
                            //                item.LAVANDERIA.ToDecimal() == null ? 0 : item.LAVANDERIA.ToDecimal().Value,
                            //                item.PATIO_LAVANDERIA.ToDecimal() == null ? 0 : item.PATIO_LAVANDERIA.ToDecimal().Value,
                            //                item.ZONA_COMUN.ToDecimal() == null ? 0 : item.ZONA_COMUN.ToDecimal().Value,
                            //                "", Convert.ToInt16(item.PISOS.ToDecimal() == null ? 0 : item.PISOS.ToDecimal().Value));


                            this.AddUIDepartamento(_db,
                                            idEtapa,
                                            (item.CODIGO.HasValue() ? item.CODIGO : item.LOTE),
                                            item.LOTE,
                                            manzada.idInternal,
                                            idcaracteristica,
                                            bloque.UILocalizacion.Etapa.plazoEntrega,
                                            bloque.idInternal,
                                            modelo.idInternal,
                                            fechaFin,
                                            item.COMENTARIO,
                                            true,
                                            item.DIRECCION,
                                            item.REFERENCIA,
                                            item.AREATERRENO.ToDecimal() == null ? 0 : item.AREATERRENO.ToDecimal().Value,
                                            item.AREACONSTRUIDA.ToDecimal() == null ? 0 : item.AREACONSTRUIDA.ToDecimal().Value,
                                            item.AREATERRENO.ToDecimal() == null ? 0 : item.AREATERRENO.ToDecimal().Value,
                                            item.PARTIDA,
                                            0,0,
                                            3,
                                            item.PRECIO.ToDecimal() == null ? 0 : item.PRECIO.ToDecimal().Value,
                                            0,
                                            item.UBICACION,
                                            item.FONDO,
                                            item.FRENTE,
                                            item.DERECHO,
                                            item.IZQUIERDO,"");

                        }
                        else
                        {
                            decimal precio = item.PRECIO.ToDecimal() == null ? 0 : item.PRECIO.ToDecimal().Value;
                            if (ui.idEstado==16| ui.idEstado==2)  ///separado   vendido
                                     precio=ui.precio;

                            this.UpdateUILote(_db,
                                                ui.idInternal,
                                                (item.CODIGO.Trim().Length>2?item.CODIGO:ui.descripcion),
                                                ui.descripcion,
                                                ui.idLocalizacion,
                                                ui.idAtributo,
                                                ui.plazoMaxEntrega,
                                                bloque.idInternal,
                                                modelo.idInternal,
                                                fechaFin,
                                                ui.comentario,
                                                true,
                                                item.DIRECCION,
                                                item.REFERENCIA,
                                                item.AREATERRENO.ToDecimal() == null ? 0 : item.AREATERRENO.ToDecimal().Value,
                                                item.AREACONSTRUIDA.ToDecimal() == null ? 0 : item.AREACONSTRUIDA.ToDecimal().Value,
                                                item.AREATERRENO.ToDecimal() == null ? 0 : item.AREATERRENO.ToDecimal().Value,
                                                item.PARTIDA,
                                                3,
                                                precio,
                                                ui.montoSeparacion,
                                                ui.urbanizacion,
                                                item.FONDO,
                                                item.FRENTE,
                                                item.DERECHO,
                                                item.IZQUIERDO,
                                                Convert.ToInt16(item.PISOS.ToDecimal() == null ? 0 : item.PISOS.ToDecimal().Value),
                                                item.DORMITORIO1.ToDecimal() == null ? 0 : item.DORMITORIO1.ToDecimal().Value,
                                                item.DORMITORIO2.ToDecimal() == null ? 0 : item.DORMITORIO2.ToDecimal().Value,
                                                item.DORMITORIO3.ToDecimal() == null ? 0 : item.DORMITORIO3.ToDecimal().Value,
                                                item.DORMITORIO4.ToDecimal() == null ? 0 : item.DORMITORIO4.ToDecimal().Value,
                                                item.BANO1.ToDecimal() == null ? 0 : item.BANO1.ToDecimal().Value,
                                                item.BANO2.ToDecimal() == null ? 0 : item.BANO2.ToDecimal().Value,
                                                item.BANO3.ToDecimal() == null ? 0 : item.BANO3.ToDecimal().Value,
                                                item.COMEDOR.ToDecimal() == null ? 0 : item.COMEDOR.ToDecimal().Value,
                                                item.SALA.ToDecimal() == null ? 0 : item.SALA.ToDecimal().Value,
                                                item.SALA_COMEDOR_COCINA.ToDecimal() == null ? 0 : item.SALA_COMEDOR_COCINA.ToDecimal().Value,
                                                item.SALA_COMEDOR.ToDecimal() == null ? 0 : item.SALA_COMEDOR.ToDecimal().Value,
                                                item.COCINA.ToDecimal() == null ? 0 : item.COCINA.ToDecimal().Value,
                                                item.PATIO.ToDecimal() == null ? 0 : item.PATIO.ToDecimal().Value,
                                                item.LAVANDERIA.ToDecimal() == null ? 0 : item.LAVANDERIA.ToDecimal().Value,
                                                item.PATIO_LAVANDERIA.ToDecimal() == null ? 0 : item.PATIO_LAVANDERIA.ToDecimal().Value,
                                                item.ZONA_COMUN.ToDecimal() == null ? 0 : item.ZONA_COMUN.ToDecimal().Value,
                                                ui.mapCordenada);
                        }
                        
                    }
	            }

        }

        public static DataTable selectExcel(string Arch, string Hoja)
        {

            OleDbConnection Conex = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Arch + ";Extended Properties=Excel 12.0;");
            
            OleDbCommand CmdOle = new OleDbCommand();

            CmdOle.Connection = Conex;
            
            CmdOle.CommandType = CommandType.Text;
            CmdOle.CommandText = "SELECT * FROM [" + Hoja +"]";

            

            OleDbDataAdapter AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conex);

            DataTable dt = new DataTable();

            AdaptadorOle.Fill(dt);

            return dt;
        }
 


    }
}
